﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using DevComponents.DotNetBar;
using log4net;
using log4net.Config;
using Data_Access_Layer;
using CaffeBillard.Properties;
using System.Diagnostics;
namespace CaffeBillard
{
    public partial class FormMain : DevComponents.DotNetBar.Office2007RibbonForm
    {
        protected static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

        public FormMain()
        {
            InitializeComponent();
        }
        Account acount = new Account();
        private void FormMain_Load(object sender, EventArgs e)
        {
		
            tsNhanVien.Text = "Nhân viên: " + Employee.Objects.FirstOrDefault(x => x.Id == WorkSession.Current.CurrentAccount.EmpId).Name.ToString();
            string access = GetAccesss();
            Visibe_Control(access);
            Time.Start();
            Status.BackColor = Color.FromArgb(194, 217, 247);
        }
        /// <summary>
        /// lay cac quyen theo chuc vu cua Account vua dang nhap
        /// </summary>
        /// <returns></returns>
        /// 
       
        string GetAccesss()
        {
            string acc = "";
            Account account = Account.Objects.FirstOrDefault(x => x.Id == WorkSession.Current.CurrentAccount.Id);
            var emp = Employee.Objects.FirstOrDefault(x => x.Id == account.EmpId);
            var role = Role.Objects.FirstOrDefault(x => x.Id == emp.RoleId);
            var per = Permission.Objects.Where(x => x.RolId == role.Id).ToList();
			WorkSession.Current.CurrentAccount.LastLogin = DateTime.Now;
            int accID;
            for (int i = 0; i < per.Count; i++)
            {
                accID = per[i].AccId;
                acc += Access.Objects.FirstOrDefault(x => x.Id == accID).AccName + " ";
            }
            return acc;

        }
        /// <summary>
        /// Hàm hiển thị các quyền theo chức vụ của tài khoản đăng nhập
        /// </summary>
        /// <param name="access"></param>
        void Visibe_Control(string access)
        {
            string[] acc = access.Split(' ');
            foreach (BubbleButton c in bubbleBarTab1.Buttons)
            {
                c.Visible = acc.Contains(c.Name);
            }
            foreach (BaseItem c in itemContainer3.SubItems)
            {
                c.Visible = acc.Contains(c.Name);

            }
        }


       


        /// <summary>
        /// Xử lý chức năng đăng xuất
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnLogout_Click(object sender, EventArgs e)
        {
            XmlConfigurator.Configure();
            log.Info("Nhan vien: Dang xuat khoi he thong");
            FormLogin frm = new FormLogin();
            frm.Show();
            this.Hide();
        }

        /// <summary>
        /// Xử lý chức năng sao lưu dữ liệu
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnBackup_Click(object sender, EventArgs e)
        {
            XmlConfigurator.Configure();
            log.Info("Nhan vien: backup du lieu");
            FormBackupRestore frm= new FormBackupRestore(true);
            frm.Show();
        }

        /// <summary>
        /// Xử lý chức năng phục hồi dữ liệu
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnRestore_Click(object sender, EventArgs e)
        {
            XmlConfigurator.Configure();
            log.Info("Nhan vien: khoi phuc du lieu");
            FormBackupRestore frm = new FormBackupRestore(false);
            frm.Show();
        }

        /// <summary>
        /// Hiển thị form Account
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnAccount_Click(object sender, EventArgs e)
        {
            XmlConfigurator.Configure();
            log.Info("Nhan vien: Truy cap vao trinh don quan ly tai khoan");
			var work = new FormAccount() { MdiParent = this };
			work.Show();
        }

        /// <summary>
        /// Hiển thị form hoạt động 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnWorking_Click(object sender, ClickEventArgs e)
        {
			XmlConfigurator.Configure();
			log.Info("Nhan vien: Truy cap vao trinh don quan ly phiên làm việc");
            var work = new FormWorking() { MdiParent = this };
            work.Show();
        }

        /// <summary>
        /// Hiển thị form quản lý nhân viên (FormEmployee)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnEmployee_Click(object sender, ClickEventArgs e)
        {
            XmlConfigurator.Configure();
            log.Info("Nhan vien: Truy cap vao trinh don quan ly nhan vien");
           var emp = new FormEmployee() { MdiParent = this };        
            emp.Show();
        }

        /// <summary>
        /// Hiển thị form quản lý nhà cung cấp (FormSupplier)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnSupplier_Click(object sender, ClickEventArgs e)
        {
            XmlConfigurator.Configure();
            log.Info(tsNhanVien + ": Truy cap vao trinh don nha cung cap");
            var work = new FormSupplier() { MdiParent = this };
            work.Show();
        }

        /// <summary>
        /// Hiển thị form quản lý bàn (FormDesk)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnDesk_Click(object sender, ClickEventArgs e)
        {
            XmlConfigurator.Configure();
            log.Info("Nhan vien: Truy cap vao trinh don quan ly ban");
            var desk = new FormDesk() { MdiParent = this };
            desk.Show();
        }

        /// <summary>
        /// Hiển thị form quản lý hàng hóa (FormArticle)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnArticle_Click(object sender, ClickEventArgs e)
        {
            XmlConfigurator.Configure();
            log.Info("Nhan vien: Truy cap vao trinh don quan ly hang hoa");
            var desk = new FormArticle() { MdiParent = this };
            desk.Show();
        }

        /// <summary>
        /// Hiển thị form quản lý hóa đơn (FormOrder)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnOrder_Click(object sender, ClickEventArgs e)
        {
            XmlConfigurator.Configure();
            log.Info("Nhan vien: Truy cap vao trinh don quan ly hoa don");
            var order = new FormOrder() { MdiParent = this };
            order.Show();
        }

        /// <summary>
        /// Hiển thị form quản lý doanh thu (FormRevenue)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnRevenue_Click(object sender, ClickEventArgs e)
        {
            XmlConfigurator.Configure();
            log.Info("Nhan vien: Truy cap vao trinh don quan ly doanh thu");
            var revenue = new FormRevenue() { MdiParent = this };
            revenue.Show();
        }

        /// <summary>
        /// Xử lý sự kiện khi kích thước FormMain thay đổi
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void FormMain_SizeChanged(object sender, EventArgs e)
        {
            this.Refresh();
        }


        /// <summary>
        /// Sự kiện khi người dùng tắt form, thì hỏi xem có chắc muốn tắt không?
        /// </summary>
        private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
        {
            XmlConfigurator.Configure();
            log.Info("Nhan vien: Thoat khoi he thong");
            var messenger = MessageBox.Show("Bạn có muốn sao lưu lại dữ liệu không?", "Thông báo",
                                        MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
            if (messenger == DialogResult.Yes)
            {
                FormBackupRestore frm = new FormBackupRestore(true);
                frm.Show();
                frm.FormClosed += frm_FormClosed;
            }
            else if(messenger==DialogResult.Cancel)
            {
                e.Cancel = true;
            }
            else
            {
                Environment.Exit(0);
            }

        }

        void frm_FormClosed(object sender, FormClosedEventArgs e)
        {
            Environment.Exit(0);
        }

        /// <summary>
        /// Xử lý chức năng thoát chương trình
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnExit_Click(object sender, EventArgs e)
        {
            XmlConfigurator.Configure();
            log.Info("Nhan vien: Thoat khoi he thong");
            var messenger = MessageBox.Show("Bạn có muốn sao lưu lại dữ liệu không?", "Thông báo",
                                            MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
            if (messenger == DialogResult.Yes)
            {
                FormBackupRestore frm1 = new FormBackupRestore(true);
                frm1.Show();
                frm1.FormClosed += frm1_FormClosed;
            }
            else if (messenger == DialogResult.Cancel)
                return;
            else
                Environment.Exit(0);
        }

        void frm1_FormClosed(object sender, FormClosedEventArgs e)
        {
            Environment.Exit(0);
        }

        /// <summary>
        /// Refesh form main
        /// </summary>
        private void btnRefesh_Click(object sender, EventArgs e)
        {
            this.Refresh();
        }

        /// <summary>
        /// Đóng tất cả form đang chạy
        /// </summary>
        private void btnClose_Click(object sender, EventArgs e)
        {
            foreach(Form a in MdiChildren)
            {
                a.Close();
            }
        }

        /// <summary>
        /// Tạo đồng hồ
        /// </summary>
        private void Time_Tick(object sender, EventArgs e)
        {
            ToolClock.Text = "Clock : " + DateTime.Now.Hour + " : " + DateTime.Now.Minute + " : " + DateTime.Now.Second;
			tsNhanVien.Text = "Nhân viên: " + Employee.Objects.FirstOrDefault(x => x.Id == WorkSession.Current.CurrentAccount.EmpId).Name.ToString();
        }

        /// <summary>
        /// Chạy file help.chm
        /// </summary>
        private void btnHelp_Click(object sender, EventArgs e)
        {
            Process.Start("Help.chm");
        }



        #region Trình phát nhạc
        //Tạo list lưu file nhạc
        List<string> list = new List<string>();
      
        
        //Lấy file nhạc
        private void btnAdd_Click(object sender, EventArgs e)
        {
            lbDS.Items.Clear();
            if (openFileDialogNhac.ShowDialog() == DialogResult.OK)
            {
                if (openFileDialogNhac.FileNames.Count() > 0)
                {
                    foreach (var item in openFileDialogNhac.FileNames)
                    {
                        list.Add(item);
                        lbDS.Items.Add(item.Substring(item.LastIndexOf('\\') + 1));
                    }
                    lbDS.SelectedIndex = 0;
                    //Tiến hành phát bài đầu tiên
                    axWindowsMediaPlayer1.URL = list[0];
                    axWindowsMediaPlayer1.Ctlcontrols.play();
                  
                }
            }
        }

        

        //Kích chọn bài hát trong listbox thì phát bài đó
        private void lbDS_SelectedIndexChanged(object sender, EventArgs e)
        {
            axWindowsMediaPlayer1.URL = list[lbDS.SelectedIndex].ToString();
            axWindowsMediaPlayer1.Ctlcontrols.play();
        }

        //Khi bài hát hết thì cho timer hoạt động
        private void axWindowsMediaPlayer1_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
        {
            try
            {
                if (axWindowsMediaPlayer1.playState == WMPLib.WMPPlayState.wmppsMediaEnded)
                {
                    timer1.Interval = 100;
                    timer1.Enabled = true;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Lỗi trình phát nhạc" + ex.Message);
            }
        }

        //Tự động chuyển bài khi kết thúc bài
        private void timer1_Tick(object sender, EventArgs e)
        {
            try
            {
              
                if (lbDS.SelectedIndex < list.Count - 1)
                {
                    lbDS.SelectedIndex = lbDS.SelectedIndex + 1;
                    axWindowsMediaPlayer1.URL = list[lbDS.SelectedIndex + 1].ToString();
                    timer1.Enabled = false;
                }
                else
                {
                    lbDS.SelectedIndex = 0;
                    timer1.Enabled = false;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Lỗi trình phát nhạc" + ex.Message);
            }
        }


        //Chuyển qua bài khác
        private void buttonX1_Click(object sender, EventArgs e)
        {
            if (lbDS.Items.Count > 0)
            {
                Random rd = new Random();
                int vt = rd.Next(0, list.Count);
                lbDS.SelectedIndex = vt;
                axWindowsMediaPlayer1.URL = list[vt].ToString();
            }
        }
        #endregion



       string [] imglist;
        private int chay;

        /// <summary>
        /// Chọn hình nền cho chương trình
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnBackground_Click(object sender, EventArgs e)
        {
            var FD = new System.Windows.Forms.OpenFileDialog();
            FD.Filter = "Image files|*.png;*.jpg;*.jpef;*.bmp";
            FD.Multiselect = true;
            if (FD.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
               
                if(FD.FileNames.Count() >0)
                {
                    BackgroundImage = Image.FromFile(FD.FileNames[0]);
                    imglist = FD.FileNames;
                    timerChayHinh.Start();
                }

            }
        }

        /// <summary>
        ///Tự động chuyển hình
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void timerChayHinh_Tick(object sender, EventArgs e)
        {
            //Nếu hình đang sử dụng là hình cuối thì chuyển về hình đầu tiên
            if (chay == imglist.Length - 1)
                chay = -1;
            BackgroundImage = Image.FromFile(imglist[++chay]);
        }
      
    }
}
